package com.kevin.swing;

import java.awt.Desktop;
import java.awt.Image;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.net.URI;
import java.net.URL;

import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;

import org.springframework.boot.web.support.SpringBootServletInitializer;

import com.kevin.model.config.PropertiesModel;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class SystemTrayManager extends SpringBootServletInitializer {
    private SystemTray systemTray; // 系统托盘
    private TrayIconKevin trayIcon = null;
    private Image img;// 图标

    /**
     * 显示系统托盘
     * 
     * @Title showTray
     * @author 吕凯
     * @date 2016年8月27日 下午3:51:08 void
     */
    public void showTray() {
        try {
            if (SystemTray.isSupported()) {// 判断系统是否支持系统托盘
                if (trayIcon != null) {
                    systemTray.remove(trayIcon);
                    systemTray.add(trayIcon);
                }
            }
        } catch (Exception e1) {
            log.error("", e1);
        }
    }

    /**
     * 增加系统托盘
     * 
     * @Title addSystemTray
     * @author 吕凯
     * @date 2016年8月27日 下午3:51:20 void
     */
    public void addSystemTray() {
        System.setProperty("java.awt.headless", "false");
        // 获取默认的图片
        if (SystemTray.isSupported()) {// 判断系统是否支持系统托盘
            if (systemTray == null) {
                systemTray = SystemTray.getSystemTray();// 创建系统托盘
                if (trayIcon != null) {
                    systemTray.remove(trayIcon);
                }
            }
            // 创建弹出式菜单
            JPopupMenu popup = new JPopupMenu();
            // 主界面选项
            JMenuItem mainMenuItem = new JMenuItem("主界面");
//              mainMenuItem.setActionCommand("main menu");  
            mainMenuItem.addActionListener(e -> {
                openMainPage();

            });
            // 退出程序选项
            JMenuItem exitMenuItem = new JMenuItem("退出");
            exitMenuItem.addActionListener(e -> {
                exitSoft();
            });

            popup.add(mainMenuItem);
            // 弹出式菜单添加分割线
            popup.addSeparator();
            popup.add(exitMenuItem);

            URL url = this.getClass().getResource("/images/tray.png");
            img = Toolkit.getDefaultToolkit().getImage(url);
            trayIcon = new TrayIconKevin(img);// 创建trayIcon
            trayIcon.setJPopupMenu(popup);
            trayIcon.setImageAutoSize(true);
            trayIcon.addActionListener(e -> {
                openMainPage();
            });
        }
    }

    /**
     * 退出
     * 
     * @Title exitSoft
     * @author 吕凯
     * @date 2018年1月24日 下午2:40:01 void
     */
    private void exitSoft() {
//        systemTray.remove(trayIcon);
        System.exit(0);
    }

    /**
     * 打开主页面
     * 
     * @Title openMainPage
     * @author 吕凯
     * @date 2018年1月24日 下午2:40:10 void
     */
    private void openMainPage() {
        Desktop desktop = Desktop.getDesktop();
        try {
            String port = PropertiesModel.APPLICATION.getString("server.port");
            String contextPath = PropertiesModel.APPLICATION.getString("server.context-path");
            String mainPageUrl = "http://localhost:" + port + contextPath;
            desktop.browse(new URI(mainPageUrl));
        } catch (Exception e1) {
            log.error("", e1);
        }
    }
}